const express = require('express');
const router = express.Router();
const db = require('../../../../util/dbConfig/dbConfig')
const dateReplace = require('../../../../public/javascripts/timeFormat')


//单一增加(普通)
router.post('/single',async (req,res) => {
    //鉴权
    if(req.session.userInfo.admin === 1 || !req.session.userInfo) {
        return res.send({
            code: 3,
            msg: '您未登录或权限不够'
        })
    }
    //时间格式修改
// let obj = {
//         // ID:1,  // 配种信息编号
//         eweId:'81490',         //母羊编号
//         ramId:'2333',         //公羊编号
//         //以上为修改条件的索引
//         //以下为修改的内容，不可为空，若为空，填入无信息
//         begin_date:'2021-11-11T12:15:01Z',     //放栓时间(母)
//         finish_date:'2021-11-15T12:15:01Z',    //撤栓时间(母)
//         PMSG:41.02,           //PMSG(母)
//         PG:46.01,             //PG(母)
//         adopt_precise:454.01,  //采精量(公)
//         vitality:46,       //精液活力(公)
//         density:454,        //精液密度(公)
//         dilution_ratio:451.00, //稀释倍数(公)
//         date:'2021-11-10T12:15:01Z',           //采集日期(公)
//         heat_firm1_date:'2021-11-10T12:15:01Z',    //第一次发情日期(母)
//         heat_firm1_number:1,    //第一次发情数量(母)
//         heat_firm2_date:'2021-11-10T12:15:01Z',    //第二次发情日期(母)
//         heat_firm2_number:1,    //第二次发情数量(母)
//         sperm_record1:4.51,      //第一次输精量(公)
//         sperm_record1_date:'2021-11-10T12:15:01Z', //第一次输精时间(公)
//         sperm_record2:45.02,      //第二次输精量(公)
//         sperm_record2_date:'2021-11-10T12:15:01Z', //第二次输精时间(公)
//         remark:null,             //备注
//     }
    //接受参数
    let {
        eweId,         //母羊编号
        ramId,         //公羊编号
        begin_date,     //放栓时间(母)
        finish_date,    //撤栓时间(母)
        PMSG,           //PMSG(母)
        PG,             //PG(母)
        adopt_precise,  //采精量(公)
        vitality,       //精液活力(公)
        density,        //精液密度(公)
        dilution_ratio, //稀释倍数(公)
        date,           //采集日期(公)
        heat_firm1_date,    //第一次发情日期(母)
        heat_firm1_number,    //第一次发情数量(母)
        heat_firm2_date,    //第二次发情日期(母)
        heat_firm2_number,    //第二次发情数量(母)
        sperm_record1,      //第一次输精量(公)
        sperm_record1_date, //第一次输精时间(公)
        sperm_record2,      //第二次输精量(公)
        sperm_record2_date, //第二次输精时间(公)
        remark,             //备注
    } = req.body
    //格式化时间
    begin_date =  await dateReplace(begin_date,res)
    finish_date =  await dateReplace(finish_date,res)
    date =  await dateReplace(date,res)
    heat_firm1_date =  await dateReplace(heat_firm1_date,res)
    heat_firm2_date =  await dateReplace(heat_firm2_date,res)
    sperm_record1_date =  await dateReplace(sperm_record1_date,res)
    sperm_record2_date =  await dateReplace(sperm_record2_date,res)

    let arr = [
        eweId,         //母羊编号
        ramId,         //公羊编号
        begin_date,     //放栓时间(母)
        finish_date,    //撤栓时间(母)
        PMSG,           //PMSG(母)
        PG,             //PG(母)
        adopt_precise,  //采精量(公)
        vitality,       //精液活力(公)
        density,        //精液密度(公)
        dilution_ratio, //稀释倍数(公)
        date,           //采集日期(公)
        heat_firm1_date,    //第一次发情日期(母)
        heat_firm1_number,    //第一次发情数量(母)
        heat_firm2_date,    //第二次发情日期(母)
        heat_firm2_number,    //第二次发情数量(母)
        sperm_record1,      //第一次输精量(公)
        sperm_record1_date, //第一次输精时间(公)
        sperm_record2,      //第二次输精量(公)
        sperm_record2_date, //第二次输精时间(公)
    ]

    for(let i = 0; i<arr.length; i++){
        if(arr[i] === null || arr[i] === undefined){
            return res.send({
                code: 1,
                msg: '参数错误，有选项为空'
            })
        }
    }
    try{
        //查询母羊
        let findSqlMu = `select ID from sheep where ID=? and SEX=2`
        let findSqlArr = [eweId]
        let findResult = await db.SySqlConnect(findSqlMu,findSqlArr)
        if(findResult.length === 0){
            return res.send({
                code: 2,
                msg: '该母羊不存在'
            })
        }
        //查询公羊
        let  findSqlGong = `select ID from sheep where ID=? and SEX=1`
        let GongArr = [ramId]
        let findGongResult = await db.SySqlConnect(findSqlGong,GongArr)
        if(findGongResult.length === 0){
            return res.send({
                code: 2,
                msg: '该公羊不存在'
            })
        }
        //该羊存在
        let addSql1 = `insert into hybridization (
            EWE_ID,
            RAM_ID,
            BEGIN_DATE,
            FINISH_DATE,
            PMSG,
            PG,
            ADOPT_PRECISE,
            VITALITY,
            DENSITY,
            DILUTION_RATIO,
            DATE,
            HEAT_FIRM1_DATE,
            HEAT_FIRM1_NUMBER,
            HEAT_FIRM2_DATE,
            HEAT_FIRM2_NUMBER,
            SPERM_RECORD1,
            SPERM_RECORD1_DATE,
            SPERM_RECORD2,
            SPERM_RECORD2_DATE`
        
      
      let addSql = addSql1 + ')' + `values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?`
      if(remark !== '' && remark !== null ){
        addSql1 = addSql1 + `,remark `
        addSql = addSql + `,${remark}`
      }
      addSql = addSql + `)`
        let addResult = await db.SySqlConnect(addSql,arr)
        if(addResult.affectedRows === 1){
            return res.send({
                code: 0,
                msg: '添加成功'
            })
        }else{
            return res.send({
                code: 2,
                msg: '添加失败'
            })
        }
    }catch (e) {
        console.log(e);
        return res.send({
            code: 4,
            msg: '服务器错误，请稍后再试'
        })
    }
})


//批量增加（管理员）
router.post('/batch',async (req,res) => {
    //鉴权
    if(req.session.userInfo.admin === 0 || !req.session.userInfo) {
        return res.send({
            code: 3,
            msg: '您未登录或权限不够'
        })
    }
  let { arr } = req.body
  
    arr = JSON.parse(arr)
    let containers = [] //存放 当前sql保存的数据的  容器 *只有一条数据
    let resultArr = []  //存放 sql保存数据 结果的状态，成功为1，失败为0
    let allContainers = [] //存放所有要保存的数据
    let result //定义保存 结果的状态

    //循环参数数组每一条数据
    for(let i =0; i< arr.length;i++){

        //迭代参数数组的每一条对象内的所有值
        for (let Key in arr[i]) {
            //将参数数组中的对象的值 保存到容器中
            if(Key === 'ID'){
                continue;
            }
            containers.push(arr[i][Key])
        }
        console.log(containers);
        //定义每条数据的长度
        let index = Object.keys(arr[0]).length -1
        //如果容器的长度为两条数据的长度
        if(containers.length>=2*index){
            //使容器长度为一条数据长度，内容为后进入的最后一条数据
            containers = containers.splice(index,2*index-1)
        }
        //containers.length===20
        //时间索引列表
        let timeIndex = [
            containers.length -2,
            containers.length -4,
            containers.length -7,
            containers.length -9,
            containers.length -10,
            containers.length -17,
            containers.length -18
        ]
        //时间格式修改
        for(let t = 0; t<timeIndex.length; t++){
            let date = containers[timeIndex[t]] + ''
            if(date.indexOf('T') !== -1 || date.indexOf('Z') !== -1 ){
                //T在Z不在，或者Z在T不在，或者T和Z都在
                if(date.indexOf('T') !== -1 && date.indexOf('Z') !== -1 ){
                    //T和Z都在
                    containers[timeIndex[t]] = date.replace('T',' ').replace('Z',' ')
                }else{
                    return res.send({
                        code: 1,
                        msg: '请填选正确日期格式'
                    })
                }
            }
        }



        //console.log(containers);

        let sql =  `insert into hybridization (
            EWE_ID,
            RAM_ID,
            BEGIN_DATE,
            FINISH_DATE,
            PMSG,
            PG,
            ADOPT_PRECISE,
            VITALITY,
            DENSITY,
            DILUTION_RATIO,
            DATE,
            HEAT_FIRM1_DATE,
            HEAT_FIRM1_NUMBER,
            HEAT_FIRM2_DATE,
            HEAT_FIRM2_NUMBER,
            SPERM_RECORD1,
            SPERM_RECORD1_DATE,
            SPERM_RECORD2,
            SPERM_RECORD2_DATE,
            remark
        ) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`

        db.sqlConnect(sql,containers,(err,data) =>{
            if (err){
                //如果报错，保存数据的结果状态为0，添加到状态保存容器
                resultArr.push(0)
                console.log(err);
                return res.send({
                    code: 4,
                    msg: '服务器错误，请稍后再试'
                })
            }
        })
        resultArr.push(1)
        allContainers.push(containers)
        // try{
        //     result = await db.SySqlConnect(sql,containers)
        // }catch (e) {
        //     //如果报错，保存数据的结果状态为0，添加到状态保存容器
        //     resultArr.push(0)
        //     console.log(e);
        //     return res.send({
        //         code: 4,
        //         msg: '服务器错误，请稍后再试'
        //     })
        // }

    }


    //循环结果数组，检查是否有失败项
    for (let j =resultArr.length-1;j>=0;j--){
        if(resultArr[j] !==1 ){
            return res.send({
                code: 2,
                msg: '添加错误，请检查表格是否正确'
            })
        }
    }


    //成功返回
    res.send({
        code: 0,
        msg: `添加成功${allContainers.length}条`,
        allContainers,  //成功添加的每一条数据
        resultArr       //每条数据的保存状态是否成功
    })
})

module.exports = router
